/**
 * 修复 uView Toast 组件使用问题的脚本
 * 
 * 此脚本将：
 * 1. 将所有 this.$refs.uToast.show() 替换为 this.$u.toast()
 * 2. 移除所有 <u-toast ref="uToast"></u-toast> 组件引用
 */

const fs = require('fs');
const path = require('path');

// 要处理的目录
const baseDir = './sun-uniapp/pages';

// 递归获取所有 .vue 文件
function getAllVueFiles(dir, fileList = []) {
  const files = fs.readdirSync(dir);
  
  files.forEach(file => {
    const filePath = path.join(dir, file);
    const stat = fs.statSync(filePath);
    
    if (stat.isDirectory()) {
      getAllVueFiles(filePath, fileList);
    } else if (path.extname(file) === '.vue') {
      fileList.push(filePath);
    }
  });
  
  return fileList;
}

// 修复文件中的 Toast 使用
function fixToastInFile(filePath) {
  try {
    let content = fs.readFileSync(filePath, 'utf8');
    let modified = false;
    
    // 1. 替换 showToast 方法
    const showToastRegex = /showToast\s*\([^)]*\)\s*{\s*this\.\$refs\.uToast\.show\(\{[^}]*\}\)\s*}/g;
    if (showToastRegex.test(content)) {
      content = content.replace(showToastRegex, 
        `showToast(title, type = 'default') {
      // 使用 uView 2.0 的 toast 方法
      this.$u.toast(title)
    }`);
      modified = true;
    }
    
    // 2. 移除 Toast 组件引用
    const toastComponentRegex = /<u-toast\s+ref="uToast"><\/u-toast>/g;
    if (toastComponentRegex.test(content)) {
      content = content.replace(toastComponentRegex, '');
      modified = true;
    }
    
    // 3. 移除带注释的 Toast 组件引用
    const commentedToastRegex = /\s*<!-- Toast提示 -->\s*<u-toast\s+ref="uToast"><\/u-toast>/g;
    if (commentedToastRegex.test(content)) {
      content = content.replace(commentedToastRegex, '');
      modified = true;
    }
    
    if (modified) {
      fs.writeFileSync(filePath, content, 'utf8');
      console.log(`已修复: ${filePath}`);
    }
  } catch (error) {
    console.error(`处理文件 ${filePath} 时出错:`, error);
  }
}

// 主函数
function main() {
  console.log('开始修复 uView Toast 组件使用问题...');
  
  const vueFiles = getAllVueFiles(baseDir);
  console.log(`找到 ${vueFiles.length} 个 .vue 文件`);
  
  vueFiles.forEach(file => {
    fixToastInFile(file);
  });
  
  console.log('修复完成!');
}

main();